package traits

import org.joda.time.Interval

import objetos.Reservas
import objetos.ServicioMetereologico

trait Validador {

  def validarReserva(cancha: Cancha, horario: Interval) = true
}

trait ValidaCancha extends Validador {

  override def validarReserva(cancha: Cancha, horario: Interval) = {
    if (!Reservas.canchas.contains(cancha)) throw new RuntimeException("Cancha inexistente")
    super.validarReserva(cancha, horario)
  }
}

trait ValidaLuz extends Validador {

  override def validarReserva(cancha: Cancha, horario: Interval) = {
    if (horario.getEnd.getHourOfDay > 20 && !cancha.tieneLuz)
      throw new RuntimeException("No se puede alquilar despues de las 20 hs una cancha sin luz")
    super.validarReserva(cancha, horario)
  }
}

trait ValidaReservaUnica extends Validador {

  override def validarReserva(cancha: Cancha, horario: Interval) = {
    if (!Reservas.canchas(cancha).forall(p => horario.overlap(p) == null))
      throw new RuntimeException("La cancha ya esta reservada para ese momento")
    super.validarReserva(cancha, horario)
  }
}

trait ValidaTecho extends Validador {

  override def validarReserva(cancha: Cancha, horario: Interval) = {
    if (ServicioMetereologico.esDiaDeLluvia(horario.getStart))
      throw new RuntimeException("No se puede alquilar una cancha sin techo un dia de lluvia")
    super.validarReserva(cancha, horario)
  }
}